#include <iostream>

class Integer
{
public:
    //explicit 防止隐式转换
    //this指针，指向当前类的对象
    //初始化列表：分配空间时把初始值给上，
    //为了解决const成员变量的初始化问题
    //const成员变量必须在初始化列表中进行初始化
    explicit Integer(int a,int b,int *c):a(a),b(b),c(new int)
    {
        std::cout << "constructor!" << std::endl;

    }
    Integer(const Integer& a):a(a.a),b(a.b),c(a.c)
    {
        std::cout << "copy constructor!" << std::endl;
  
    }
    
    int GetID()
    {
        return a;
    }
    Integer Copy()
    {
        //取当前对象
        return *this;
    }
private:
    const int a;
    int b;
    int* c;
};

int main()
{
    Integer i(10,0,NULL);

//    i = 20;//隐式转换
    std::cout << i.Copy().GetID() << std::endl;
    return 0;
}   
